﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Threading;
using System.Windows.Forms;
using HotelSoft.HotelManagement_BUS;
using System.Collections;
using HotelSoft.HotelManagement_DTO;

namespace HotelSoft.HotelManagement_GUI
{
    public partial class frmQuanly_PHIEUDK : Form
    {
        // Define the CS_DROPSHADOW constant
        private const int CS_DROPSHADOW = 0x00020000;

        // Override the CreateParams property
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ClassStyle |= CS_DROPSHADOW;
                return cp;
            }
        }
        Double temp = 1;
        public bool bNhapDung = false;
        public int iCo = 0;
        ArrayList dsPhieuDangKy;//danh sach phieu dang ky dang co cua khach san
        PhieuDangKyBUS busPhieuDangKy = new PhieuDangKyBUS();//Đối tượng chứa các hàm xử lý nghiệp vụ liên quan tới Nhan vien
        PhieuDangKyDTO dtoPhieuDangKy = new PhieuDangKyDTO();
        PhongBUS busPhong = new PhongBUS();
        BindingSource bsData = null;
        private static string sophong;
        private static DateTime ngaythue;
        private static int songaythue;
        private static bool newPDK=true;

        public bool NEWPDK
        {
            get { return newPDK; }
            set { newPDK = value; }
        }

        public int Songaythue
        {
            get { return songaythue; }
            set { songaythue = value; }
        }

        public DateTime Ngaythue
        {
            get { return ngaythue; }
            set { ngaythue = value; }
        }


        public string Sophong
        {
            get { return sophong; }
            set { sophong = value; }
        }

        public frmQuanly_PHIEUDK()
        {
            InitializeComponent();
        }

        private void frmQuanly_PHIEUDK_Load(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
            culture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
            Thread.CurrentThread.CurrentCulture = culture;
            LoadCombobox();

            LayDanhSachPhieuDangKy();
            LoadCombobox();
            dtoPhieuDangKy.Ngayden = DateTime.Now;
            dtbNgayden.Text = dtoPhieuDangKy.Ngayden.ToString();
            txtSophieudangky.ReadOnly = true;
            txtChuThich.ReadOnly = true;
            Gru_LKL.Enabled = false;
            if (newPDK == false)
            {
                dtoPhieuDangKy.Ngayden = DateTime.Now;
                cbbSoPhong.Text = Sophong;
                txtSongaythue.Text = Songaythue.ToString();
                dtbNgayden.Text = Ngaythue.ToString();
                txtChuThich.Text = "Chưa thanh toán";
                txtTraTruoc.Text = "0";
                LaydulieuSoPDK();
                cbbSoPhong.Enabled = false;
                dtgBangPhieuDangKy.Enabled = false;
                Btn_Sua.Enabled = false;
                Btn_Xoa.Enabled = false;
                Btn_Them.Focus();
                Btn_Tracuu.Enabled = false;
                txtSoPDK_Search.Enabled = false;
            }
            else
            {
                Btn_Them.Enabled = false;
                Btn_Sua.Focus();
                DieukienMo(false);
            }
        }

        public void LamMoi()
        {
            txtSophieudangky.Text = "";
            txtSonguoi.Text = "";
            txtTraTruoc.Text = "";
            txtSongaythue.Text = "0";
            dtbNgayden.Value = DateTime.Now; ;
            cbbSoPhong.SelectedIndex = 0;
        }

        public void LaydulieuSoPDK()
        {
            int flagPDK;
            flagPDK = int.Parse(busPhieuDangKy.LaydulieuSoPDK().ToString());
            // MessageBox.Show(flagPDK.ToString(), "Thong Bao");
            if (flagPDK < 10 && flagPDK > 0)
            {
                txtSophieudangky.Text = "" + (0).ToString() + "" + (0).ToString() + "" + (0).ToString() + "" + flagPDK.ToString() + "";
            }
            if (flagPDK < 100 && flagPDK >= 10)
            {
                txtSophieudangky.Text = "" + (0).ToString() + "" + (0).ToString() + "" + flagPDK.ToString() + "";
            }
            if (flagPDK < 1000 && flagPDK >= 100)
            {
                txtSophieudangky.Text = "" + (0).ToString() + "" + flagPDK.ToString() + "";
            }
            if (flagPDK >= 1000)
            {
                txtSophieudangky.Text = "" + flagPDK.ToString() + "";
            }
        }

        public void DieukienMo(bool Mo)
        {
            txtSongaythue.Enabled = Mo;
            txtSonguoi.Enabled = Mo;
            txtTraTruoc.Enabled = Mo;
            cbbSoPhong.Enabled = Mo;
            dtbNgayden.Enabled = Mo;
            Gru_LKL.Enabled = Mo;
            Gru_TXS.Enabled = !Mo;
        }

        public void LoadCombobox()
        {
            DataTable tbl = new DataTable();
            tbl = busPhong.SelectAll();
            cbbSoPhong.DisplayMember = "SoPhong";
            cbbSoPhong.ValueMember = "SoPhong";
            cbbSoPhong.DataSource = tbl;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            this.Opacity = this.Opacity + 0.1;
            if (this.Opacity == temp)
            {
                timer1.Enabled = false;
            }
        }

        private void Btn_Thoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private int LayPhieuDangKyDuocChon(out ArrayList dsPhieuDangKy)
        {
            int iIndex = 0;
            dsPhieuDangKy = new ArrayList();
            foreach (DataGridViewRow dong in this.dtgBangPhieuDangKy.Rows)
            {
                DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)dong.Cells[0];
                bool bChecked = (null != cell && null != cell.Value && true == (bool)cell.Value);
                if (bChecked)
                {
                    dsPhieuDangKy.Add(dong.DataBoundItem);
                    iIndex = dong.Index;
                }
            }

            return iIndex;
        }

        private void XoaPhieuDangKy()
        {
            ArrayList dsPhieuDangKy;
            LayPhieuDangKyDuocChon(out dsPhieuDangKy);
            if (dsPhieuDangKy.Count > 0)
            {
                PhieuDangKyBUS busPhieuDangKy = new PhieuDangKyBUS();
                busPhieuDangKy.Xoa(dsPhieuDangKy);
                XoaPhieuDangKyDuocChonKhoiDanhSach();
            }
            else
            {
                MessageBox.Show("Xin hãy chọn 1 phiếu đăng ký !");
                return;
            }
        }

        private void XoaPhieuDangKyDuocChonKhoiDanhSach()
        {
            for (int i = 0; i < dtgBangPhieuDangKy.Rows.Count; i++)
            {
                DataGridViewRow dong = dtgBangPhieuDangKy.Rows[i];
                DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)dong.Cells[0];
                PhieuDangKyDTO dtoPhieuDangKyBiXoa = (PhieuDangKyDTO)dtgBangPhieuDangKy.Rows[cell.RowIndex].DataBoundItem;

                bool bChecked = (null != cell && null != cell.Value && true == (bool)cell.Value);
                if (bChecked)
                {
                    this.bsData.RemoveAt(cell.RowIndex);
                    i--;
                }
            }
        }

        private bool KiemTraDuLieuNhap()
        {
            if (txtSonguoi.Text.Length == 0 || txtSonguoi.Text.Trim() == "" ||
                dtbNgayden.Value==null)
            {
                MessageBox.Show("Bạn phải điền đầy đủ dữ liệu!");
                return false;
            }
            return true;
        }

        private void Btn_Them_Click(object sender, EventArgs e)
        {

            PhieuDangKyDTO dtoPhieuDangKys = new PhieuDangKyDTO();
            bNhapDung = KiemTraDuLieuNhap();
            if (bNhapDung)
            {
                Luu_PhieuDangKyDTO dtoLuu_PhieuDangKy = new Luu_PhieuDangKyDTO();
                dtoPhieuDangKys.SoPDK = txtSophieudangky.Text;
                dtoLuu_PhieuDangKy.ISoPDK = txtSophieudangky.Text;
                dtoPhieuDangKys.SoNguoi = int.Parse(txtSonguoi.Text);
                dtoPhieuDangKys.Ngayden = dtbNgayden.Value;
                dtoPhieuDangKys.SoNgayThue = int.Parse(txtSongaythue.Text.ToString());
                dtoPhieuDangKys.TraTruoc = float.Parse(txtTraTruoc.Text.ToString());
                dtoPhieuDangKys.ChuThich = txtChuThich.Text;
                dtoPhieuDangKys.SoPhong = cbbSoPhong.Text.ToString();
                busPhieuDangKy.Them(dtoPhieuDangKys);
                LayDanhSachPhieuDangKy();
                if (busPhieuDangKy.UpdateluuSoPDK(dtoLuu_PhieuDangKy))
                {
                    MessageBox.Show("Lập phiếu thuê phòng thành công!", "Thông báo: Lưu phiếu đăng ký");
                    frmDat_PHONG frm = new frmDat_PHONG();
                    frm.CHECKCREATE_PDK = true;
                }
                else
                {
                    MessageBox.Show("Hãy kiểm tra lại thông tin nhập", "Thông báo: Lưu phiếu đăng ký");
                }

            }
            DieukienMo(false);
            Btn_Sua.Enabled = true;
            Btn_Xoa.Enabled = true;
            Btn_Them.Enabled = false;
            dtgBangPhieuDangKy.Enabled = true;
            Btn_Tracuu.Enabled = true;
            txtSoPDK_Search.Enabled = true;
            LamMoi();
        }

        private void Btn_Xoa_Click(object sender, EventArgs e)
        {
            ArrayList dsPhieuDangKy;
            LayPhieuDangKyDuocChon(out dsPhieuDangKy);
            if (dsPhieuDangKy.Count > 0)
            {
                DialogResult kq = MessageBox.Show("Bạn có thật sự muốn xóa không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (kq == DialogResult.Yes)
                {
                    XoaPhieuDangKy();
                    iCo = 1;
                    LamMoi();
                }
            }
            else
            {
                MessageBox.Show("Xin hãy chọn một hóa đơn muốn xóa!");
            }

        }

        private void LayDanhSachPhieuDangKy()
        {
            dsPhieuDangKy = busPhieuDangKy.LayDanhSachPhieuDangKy();
            XuatDanhSachPhieuDangKy(dsPhieuDangKy);
            dtgBangPhieuDangKy.CellContentClick += new DataGridViewCellEventHandler(dtgBangHoaDon_ThanhToan_CellContentClick);
        }

        private void XuatDanhSachPhieuDangKy(ArrayList ds)
        {
            dtgBangPhieuDangKy.AutoGenerateColumns = false;

            this.bsData = new BindingSource(ds, "");
            dtgBangPhieuDangKy.DataSource = bsData;
        }

        private void Btn_Sua_Click(object sender, EventArgs e)
        {
            if (txtSophieudangky.Text!="" && txtSonguoi.Text!="" )
            {
                DieukienMo(true);
                txtSonguoi.Enabled = false;
            }
            else
            {
                MessageBox.Show("Xin hãy chọn Phiếu đăng ký mà bạn muốn sửa thông tin!");
            }
        }

        private void Btn_Tracuu_Click(object sender, EventArgs e)
        {
            if (txtSoPDK_Search.Text.Trim()=="" || txtSoPDK_Search.Text.Length==0)
            {
                MessageBox.Show("Xin hãy nhập số phiếu đăng ký  để tra cứu", "Thông báo tra cứu");
                txtSoPDK_Search.Focus();
                return;
            }

            PhieuDangKyBUS busTC = new PhieuDangKyBUS();
            PhieuDangKyDTO dtoTC = new PhieuDangKyDTO();
            dtoTC.SoPDK=txtSoPDK_Search.Text;

            ArrayList dsTraCuu = busTC.getlistPDK_Tracuu(dtoTC);
            XuatDanhSachPhieuDangKy(dsTraCuu);
            DieukienMo(false);
            Btn_Them.Enabled = false;
            LamMoi();
            if (dtgBangPhieuDangKy.RowCount == 0)
            {
                MessageBox.Show("Không tìm thấy thông tin phiếu đăng ký này", "Thông báo tra cứu");
            }
        }

        private void Btn_LamMoi_Click(object sender, EventArgs e)
        {
            frmQuanly_LOAIPHONG frm = new frmQuanly_LOAIPHONG();
            frm.ShowDialog();
        }

        private void Btn_Close_Click(object sender, EventArgs e)
        {
            this.Close();
            //frmTra_PHONGs = new frmTra_PHONG();
            //this.Hide();
            //frmTra_PHONGs.Show();
            //frmTra_PHONGs.FormClosing += new FormClosingEventHandler(frmTra_PHONGs_FormClosing);
        }

        void frmTra_PHONGs_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.Show();
        }

        private void Btn_Luu_Click(object sender, EventArgs e)
        {
            try
            {

                PhieuDangKyDTO dto = new PhieuDangKyDTO();
                dto.SoPDK = txtSophieudangky.Text.ToString();
                dto.SoNguoi = int.Parse(txtSonguoi.Text.ToString());
                dto.TraTruoc = float.Parse(txtTraTruoc.Text.ToString());
                dto.Ngayden = dtbNgayden.Value;
                dto.SoNgayThue = int.Parse(txtSongaythue.Text.ToString());
                busPhieuDangKy.CapNhatThongTindondulieu(dto);
                LayDanhSachPhieuDangKy();
            }
            catch
            {
                MessageBox.Show("Xin hãy nhập đầy đủ thông tin");
            }
            DieukienMo(false);
            Btn_Them.Enabled = false;
            LamMoi();
            Btn_Them.Focus();
        }

        public int countSNT(DateTime NT, DateTime NTT)
        {
            return (int)((TimeSpan)(NTT - NT)).TotalDays + 1;
        }

        private void Btn_Khongluu_Click(object sender, EventArgs e)
        {
            LamMoi();
            DieukienMo(false);
            Btn_Them.Enabled = false;
        }

        private void btnLoad_Click(object sender, EventArgs e)
        {
            LayDanhSachPhieuDangKy();
        }

        private void btnOpentextbox_Click(object sender, EventArgs e)
        {
            //LamMoi();
            //Txt_Sophong.ReadOnly = false;
            //Txt_Sokhach.ReadOnly = false;
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
            //frmTra_PHONGs = new frmTra_PHONG();
            //this.Hide();
            //frmTra_PHONGs.Show();
            //frmTra_PHONGs.FormClosing += new FormClosingEventHandler(frmTra_PHONGs_FormClosing);
        }

        private void dtgBangHoaDon_ThanhToan_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dtgBangPhieuDangKy.SelectedCells.Count > 0)
            {
                int row = dtgBangPhieuDangKy.SelectedCells[0].RowIndex;
                txtSophieudangky.Text = dtgBangPhieuDangKy.Rows[row].Cells[1].Value.ToString();
                cbbSoPhong.Text = dtgBangPhieuDangKy.Rows[row].Cells[2].Value.ToString();
                txtSonguoi.Text = dtgBangPhieuDangKy.Rows[row].Cells[3].Value.ToString();
                dtbNgayden.Text = dtgBangPhieuDangKy.Rows[row].Cells[4].Value.ToString();
                txtSongaythue.Text = dtgBangPhieuDangKy.Rows[row].Cells[5].Value.ToString();
                txtTraTruoc.Text = dtgBangPhieuDangKy.Rows[row].Cells[6].Value.ToString();
                txtChuThich.Text = dtgBangPhieuDangKy.Rows[row].Cells[7].Value.ToString();
            }
        }

        private void btnInHD_Click(object sender, EventArgs e)
        {
            if (txtSophieudangky.Text != "")
            {
                frmReport_PhieuDK frm = new frmReport_PhieuDK();
                frm.SoPDK = txtSophieudangky.Text;
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Xin hãy chọn phiếu đăng ký!");
            }
        }
    }
}
